class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if (matrix.length == 0) return new int[0]; // 特殊条件
        int[] res = new int[matrix.length * matrix[0].length]; // 存储结果的数组
        int index = 0; // 结果数组的下标
        int left = 0;
        int right = matrix[0].length - 1;
        int top = 0;
        int bottom = matrix.length - 1;
        while (true) {
            for (int i = left; i <= right; i++) res[index++] = matrix[top][i];
            if (++top > bottom) break; // 用于判断是否还需要向下走 2 > 1
            for (int i = top; i <= bottom; i++) res[index++] = matrix[i][right];
            if (--right < left) break; // 用于判断是否还需要向左走
            for (int i = right; i >= left; i--) res[index++] = matrix[bottom][i];
            if (--bottom < top) break; // 用于判断是否还需要向上走
            for (int i = bottom; i >= top; i--) res[index++] = matrix[i][left];
            if (++left > right) break; // 用于判断是否还需要向右走
        }
        return res;
    }
}

// 1 2 3
// 4 5 6
// 7 8 9

// 1 2 3 6 9 8 7 4 5